package com.leo.consumer.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 通过此配置文件，可以Spring AMQP会自动创建交换机、队列、绑定关系等
 * 并且多次启动，不会重复创建
 */
@Configuration
public class FanoutExchangeConfig {

    /**
     * 声明交换机。使用new的方式
     */
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("gen.fanout");
    }

    /**
     * 声明交换机。使用Builder的方式
     */
    @Bean
    public FanoutExchange fanoutExchangeWithBuilder() {
        return ExchangeBuilder.fanoutExchange("gen.builder.fanout").build();
    }

    /**
     * 声明队列。使用new的方式
     */
    @Bean
    public Queue fanoutQueue1() {
        return new Queue("gen.fanout.queue1");
    }

    /**
     * 声明队列。使用Builder的方式
     */
    @Bean
    public Queue fanoutQueue2() {
        return QueueBuilder.durable("gen.fanout.queue2").build();
    }

    /**
     * 绑定队列到交换机
     */
    @Bean
    public Binding fanoutQueue1Binding(Queue fanoutQueue1, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
    }

    /**
     * 绑定队列到交换机
     */
    @Bean
    public Binding fanoutQueue2Binding() {
        return BindingBuilder.bind(fanoutQueue2()).to(fanoutExchangeWithBuilder());
    }

}
